﻿using System;

namespace _5E.Utils
{
    /// <summary>
    /// 程序说明：钩子枚举
    /// 创建作者：ahl
    /// 创建时间：2011-10-08
    /// </summary>
    public enum HookEnum : int
    {
        /// <summary>
        /// WH_JOURNALRECORD Hook用来监视和记录输入事件。
        /// 典型的，可以使用这个Hook记录连续的鼠标和键盘事件，然后通过使用WH_JOURNALPLAYBACK Hook来回放。
        /// WH_JOURNALRECORD Hook是全局Hook，它不能象线程特定Hook一样使用。
        /// WH_JOURNALRECORD是system-wide local hooks，它们不会被注射到任何行程位址空间。
        /// </summary>
        WH_JOURNALRECORD = 0,
        /// <summary>
        /// WH_JOURNALPLAYBACK Hook使应用程序可以插入消息到系统消息队列。
        /// 可以使用这个Hook回放通过使用WH_JOURNALRECORD Hook记录下来的连续的鼠标和键盘事件。
        /// 只要WH_JOURNALPLAYBACK Hook已经安装，正常的鼠标和键盘事件就是无效的。
        /// WH_JOURNALPLAYBACK Hook是全局Hook，它不能象线程特定Hook一样使用。 
        /// WH_JOURNALPLAYBACK Hook返回超时值，这个值告诉系统在处理来自回放Hook当前消息之前需要等待多长时间（毫秒）。
        /// 这就使Hook可以控制实时事件的回放。
        /// WH_JOURNALPLAYBACK是system-wide local hooks，它们不会被注射到任何行程位址空间。（估计按键精灵是用这个hook做的）
        /// </summary>
        WH_JOURNALPLAYBACK = 1,
        /// <summary>
        /// 在应用程序中，WH_KEYBOARD Hook用来监视WM_KEYDOWN and WM_KEYUP消息，这些消息通过GetMessage or PeekMessage function返回。
        /// 可以使用这个Hook来监视输入到消息队列中的键盘消息。
        /// </summary>
        WH_KEYBOARD = 2,
        /// <summary>
        /// 应用程序使用WH_GETMESSAGE Hook来监视从GetMessage or PeekMessage函数返回的消息。
        /// 你可以使用WH_GETMESSAGE Hook去监视鼠标和键盘输入，以及其他发送到消息队列中的消息。
        /// </summary>
        WH_GETMESSAGE = 3,
        /// <summary>
        /// 监视发送到窗口过程的消息,消息发送到接收窗口过程之前调用
        /// </summary>
        WH_CALLWNDPROC = 4,
        /// <summary>
        /// 当基于计算机的训练(CBT)事件发生时
        /// 在以下事件之前，系统都会调用WH_CBT Hook子程，这些事件包括：
        ///     1. 激活，建立，销毁，最小化，最大化，移动，改变尺寸等窗口事件；
        ///     2. 完成系统指令；
        ///     3. 来自系统消息队列中的移动鼠标，键盘事件；
        ///     4. 设置输入焦点事件；
        ///     5. 同步系统消息队列事件。
        /// Hook子程的返回值确定系统是否允许或者防止这些操作中的一个。
        /// </summary>
        WH_CBT = 5,
        /// <summary>
        /// 监视所有应用程序消息。
        /// </summary>
        WH_SYSMSGFILTER = 6,
        /// <summary>
        /// 监视从GetMessage 或者 PeekMessage 函数返回的鼠标消息。
        /// 使用这个Hook监视输入到消息队列中的鼠标消息。
        /// </summary>
        WH_MOUSE = 7,
        /// <summary>
        /// 当调用GetMessage 或 PeekMessage 来从消息队列中查询非鼠标、键盘消息时
        /// </summary>
        WH_HARDWARE = 8,
        /// <summary>
        /// 在系统调用系统中与其他Hook关联的Hook子程之前，系统会调用WH_DEBUG Hook子程。
        /// 你可以使用这个Hook来决定是否允许系统调用与其他Hook关联的Hook子程。
        /// </summary>
        WH_DEBUG = 9,
        /// <summary>
        /// 外壳应用程序可以使用WH_SHELL Hook去接收重要的通知。
        /// 当外壳应用程序是激活的并且当顶层窗口建立或者销毁时，系统调用WH_SHELL Hook子程。
        /// WH_SHELL 共有５钟情况：
        ///     1. 只要有个top-level、unowned 窗口被产生、起作用、或是被摧毁；
        ///     2. 当Taskbar需要重画某个按钮；
        ///     3. 当系统需要显示关于Taskbar的一个程序的最小化形式；
        ///     4. 当目前的键盘布局状态改变；
        ///     5. 当使用者按Ctrl+Esc去执行Task Manager（或相同级别的程序）。
        /// 按照惯例，外壳应用程序都不接收WH_SHELL消息。所以，在应用程序能够接收WH_SHELL消息之前，应用程序必须调用SystemParametersInfo function注册它自己。
        /// </summary>
        WH_SHELL = 10,
        /// <summary>
        /// 当应用程序的前台线程处于空闲状态时，可以使用WH_FOREGROUNDIDLE Hook执行低优先级的任务。
        /// 当应用程序的前台线程大概要变成空闲状态时，系统就会调用WH_FOREGROUNDIDLE Hook子程。
        /// </summary>
        WH_FOREGROUNDIDLE = 11,
        /// <summary>
        /// 监视发送到窗口过程的消息,窗口过程处理完消息之后调用
        /// </summary>
        WH_CALLWNDPROCRET = 12,
        /// <summary>
        /// 监视输入到线程消息队列中的键盘消息
        /// </summary>
        WH_KEYBOARD_LL = 13,
        /// <summary>
        /// 监视输入到线程消息队列中的鼠标消息。
        /// </summary>
        WH_MOUSE_LL = 14
    }

    /// <summary>
    /// 程序说明：键位值枚举
    /// 创建作者：ahl
    /// 创建时间：2011-10-08
    /// </summary>
    public enum VirtualkeyEnum : uint
    {
        F4 = 0x73,
        TAB = 0x09, ENTER = 0x0D, SHIFT = 0x10, CONTROL = 0x11, ALT = 0x12, PAUSE = 0x13, CAPITAL = 0x14,
        DOWN = 0X28, UP = 0x26, RIGHT = 0X27,
        A = 0x41, B = 0x42, C = 0x43, D = 0x44, E = 0x45, F = 0x46, G = 0x47,
        H = 0x48, I = 0x49, J = 0x4A, K = 0x4B, L = 0x4C, M = 0x4D, N = 0x4E,
        O = 0x4F, P = 0x50, Q = 0x51, R = 0x52, S = 0x53, T = 0x54,
        U = 0x55, V = 0x56, W = 0x57, X = 0x58, Y = 0x59, Z = 0x5A,
        NUMBER0 = 0x60, NUMBER1 = 0x61, NUMBER2 = 0x62, NUMBER3 = 0x63, NUMBER4 = 0x64,
        NUMBER5 = 0x65, NUMBER6 = 0x66, NUMBER7 = 0x67, NUMBER8 = 0x68, NUMBER9 = 0x69,
    }

    /// <summary>
    /// 程序说明：鼠标事件
    /// 创建作者：ahl
    /// 创建时间：2011-10-08
    /// </summary>
    [Flags]
    public enum MouseEventFlag : uint
    {
        Move = 0x0001,
        LeftDown = 0x0002, LeftUp = 0x0004, RightDown = 0x0008, RightUp = 0x0010, MiddleDown = 0x0020, MiddleUp = 0x0040,
        XDown = 0x0080, XUp = 0x0100,
        Wheel = 0x0800,
        VirtualDesk = 0x4000,
        /// <summary>
        /// 滚动中键
        /// </summary>
        Absolute = 0x8000
    }

    /// <summary>
    /// 程序说明：发送消息枚举
    /// 创建作者：ahl
    /// 创建时间：2011-10-08
    /// </summary>
    public enum SendMessageEnum
    {
        /// <summary>
        /// 获取值
        /// </summary>
        GETTEXT = 0x000D,
        /// <summary>
        /// 设置值
        /// </summary>
        SETTEXT = 0x000C,
        /// <summary>
        /// 触发Click事件
        /// </summary>
        CLICK = 0x00F5,
        /// <summary>
        /// 关闭
        /// </summary>
        CLOSE = 0x0010,
        /// <summary>
        /// 活动
        /// </summary>
        ACTIVATE = 0x0006
    }

    /// <summary>
    /// 程序说明：转化枚举
    /// 创建作者：ahl5esoft
    /// 创建时间：2012-02-22
    /// </summary>
    public enum EnumConversion
    {
        /// <summary>
        /// 全部
        /// </summary>
        All,
        /// <summary>
        /// 其中一些
        /// </summary>
        Any,
        /// <summary>
        /// 除外(只转化除传入属性以外的其他属性)
        /// </summary>
        Except
    }
    
    /// <summary>
    /// 程序说明：数据库类型枚举
    /// 创建作者：ahl
    /// 创建时间：2012-03-26
    /// </summary>
    public enum EnumDbType
    {
        /// <summary>
        /// SQL Server
        /// </summary>
        MsSql,
        /// <summary>
        /// Access
        /// </summary>
        Access,
        /// <summary>
        /// oracle
        /// </summary>
        Oracle
    }

    /// <summary>
    /// 程序说明：数据库列类型
    /// 创建作者：ahl
    /// 创建时间：2012-03-27
    /// </summary>
    public enum EnumDbColumnType
    {
        /// <summary>
        /// 普通键位
        /// </summary>
        Normal,
        /// <summary>
        /// 主键
        /// </summary>
        PK,
        /// <summary>
        /// 外键
        /// </summary>
        FK
    }

    /// <summary>
    /// 程序说明：数据表可执行动作
    /// 创建作者：ahl
    /// 创建时间：2012-03-31
    /// </summary>
    [Flags]
    public enum EnumDbExecutableAction
    {
        GetAll = 0x0001,
        GetByPK = 0x0002,
        GetByFK = 0x0004,
        Select = GetAll | GetByPK | GetByFK,
        UpdByPK = 0x0008,
        UpdByFK = 0x0016
    }
}
